package com.hrbxlh.virtualization.service;

import com.hrbxlh.virtualization.param.ClusterAutoCreateParam;
import com.hrbxlh.virtualization.param.ClusterCreateParam;
import com.hrbxlh.virtualization.param.ClusterUpdateParam;
import com.hrbxlh.virtualization.pojo.Cluster;
import com.hrbxlh.virtualization.pojo.Container;
import com.hrbxlh.virtualization.vo.ClusterVO;
import com.hrbxlh.virtualization.vo.DesktopVO;

import java.util.List;

/**
 * @author cheer
 */
public interface ClusterService {

    /**
     * 创建集群
     */
    void createCluster(ClusterCreateParam clusterCreateParam);

    /**
     * 自动生成集群
     *
     * @return 集群Id
     */
    Long autoCreateCluster(ClusterAutoCreateParam clusterCreateParam);

    /**
     * 查询公有集群列表
     */
    List<ClusterVO> listClusters();

    /**
     * 查询教师创建的集群列表
     *
     * @param stuorteaId 教师Id
     */
    List<ClusterVO> listClusters(String stuorteaId);

    /**
     * 查询集群详情
     *
     * @param clusterId 集群Id
     */
    ClusterVO queryCluster(Long clusterId);

    /**
     * 修改集群
     */
    void updateCluster(ClusterUpdateParam clusterUpdateParam);

    /**
     * 删除集群
     *
     * @param clusterId 集群Id
     * @param isForced  是否强制删除
     */
    void deleteCluster(Long clusterId, Boolean isForced);

    void deleteCluster(Long clusterId, Boolean isForced, String stuorteaId);

    /**
     * 查看集群
     */
    DesktopVO queryDesktop(String stuorteaId, Long clusterId);

    List<Cluster> listClustersByImageId(Long imageId);

    List<ClusterVO> listClustersByAllocate(String stuorteaId);

    boolean isClusterBroken(Long clusterId);

    void modifyEtcHosts(Container master, Container slave1, Container slave2);
}
